#ifndef structures_h
#define structures_h

/************************************************************************************************* 
	
	Name: structures.h
	Autor: JA&AP
	contenido: este archivo contiene las estructuras de datos utilizadas 

**************************************************************************************************/


//TODO: ponerle a todas las estructuras la terminacion '_t' de template, para utilizar el nombre de la estructura al crearlas. Ejemmplo: velocities_t, asi a la hora de crearla se llama velocities.

/* 	Estructura velocidades
	
*/
//! data structure associated with robot's velocities
typedef struct{
	/*! Right actual velocity */
	int velRightAct;
	/*! Left actual velocity */
	int velLeftAct;
	/*! Right reference velocity */
	int velRightRef;
	/*! Left reference velocity */
	int velLeftRef;
}velocities;

typedef struct{
	long posLeft;
	long posRight;
	long lastPosLeft;
	long lastPosRight;
	
}encoders;

/* 	Estructura sensores
*/	
typedef struct{
	unsigned char battState;
	unsigned int battVoltage;
}battery;

typedef struct{
	unsigned char sensorsIR;
	unsigned char bumpers;
	battery batt;
}sensors;

/* 	Estructura estado TODO: yaw es copia de orientation, hay que ver como corregir!
	
*/
typedef struct{
	float posXAct;
	float posYAct;
	float orientation;
	float yaw;
	
}robotState;


/* 	Estructura tiempos
	
*/
typedef struct{
	unsigned int intervalComm;
	unsigned int intervalMotors;
	unsigned int intervalSensors;
}times;

/* 	Estructura parametrosPI
	
	
*/
typedef struct{
	float Kp;
	float Ki;
	int Kp_int;
	int Ki_int;
	int right_acumm_error;
	int left_acumm_error;
}parametersPI;

/* 	Estructura geometriaRobot
	
*/
typedef struct{
	float radiusWheel;
	float radialDist;
	float encResolution;
}robotGeometry;
/*
typedef struct{
	char encRight;
	char encLeft;
}encoders;
*/



typedef struct{
	velocities gVels;
	sensors gSensors;
	encoders gEncod;
	robotState gRobotState;
	times gTimes;
	parametersPI gPiParam;
	robotGeometry gRobotGeom;
	int soundJingle;
}general;


/*
typedef union{
	float floatType;
	char charType[4];
}floatToChar;

typedef union{
	int intType;
	char charType[2];
}intToChar;
*/


#endif
